package be.vdab.servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import be.vdab.entities.Klant;
import be.vdab.services.KlantService;

@WebServlet("/registreren.htm")
public class RegistrerenServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static final String VIEW = "/WEB-INF/JSP/registreren.jsp";
	private static final String REDIRECT_URL = "/bevestigen.htm";
	private final KlantService klantService = new KlantService();

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher(VIEW).forward(request, response);
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		Klant gebruiker;
		gebruiker =(Klant) request.getSession().getAttribute("gebruiker");
		if(gebruiker== null){
			gebruiker = new Klant();
		}
		List<String> fouten = new ArrayList<String>();
		String voornaam = request.getParameter("voornaam");
		if (voornaam == null || voornaam.isEmpty()) {
			fouten.add("voornaam is niet ingevuld");
		}
		String familienaam = request.getParameter("familienaam");
		if (familienaam == null || familienaam.isEmpty()) {
			fouten.add("familienaam is niet ingevuld");
		}
		String straat = request.getParameter("straat");
		if (straat == null || straat.isEmpty()) {
			fouten.add("straat is niet ingevuld");
		}
		String huisNr = request.getParameter("huisNr");
		if (huisNr == null || huisNr.isEmpty()) {
			fouten.add("huisnummer is niet ingevuld");
		}
		String postcode = request.getParameter("postcode");
		if (postcode == null || postcode.isEmpty()) {
			fouten.add("postcode is niet ingevuld");
		}
		String gemeente = request.getParameter("gemeente");
		if (gemeente == null || gemeente.isEmpty()) {
			fouten.add("gemeente is niet ingevuld");
		}
		String gebruikersNaam = request.getParameter("gebruikersNaam");
		if (gebruikersNaam == null || gebruikersNaam.isEmpty()) {
			fouten.add("gebruikersnaam is niet ingevuld");				
		}
		String paswoord = request.getParameter("paswoord");
		if (paswoord == null || paswoord.isEmpty()) {
			fouten.add("paswoord is niet ingevuld");
		}
		if (!paswoord.equals(request.getParameter("paswoordControle"))) {
			fouten.add("paswoorden zijn verschillend");
		}
		List<Klant> gebruikersNamen = klantService.findGebruikersNaam(gebruikersNaam);
		if (!gebruikersNamen.isEmpty()){
			fouten.add("gebruikersnaam bestaat al");
		}
		if (fouten.isEmpty()) {
			Klant klant = new Klant(voornaam, familienaam, straat, huisNr,
					postcode, gemeente, gebruikersNaam, paswoord);
			klantService.create(klant);
			gebruiker = klant;
			request.getSession().setAttribute("gebruiker", gebruiker);
			response.sendRedirect(response.encodeRedirectURL(request.getContextPath()+REDIRECT_URL));
		} else {
			request.setAttribute("fouten", fouten);
			request.getRequestDispatcher(VIEW).forward(request, response);
		}
	}

}

